defineSuite([
        'DataSources/DynamicGeometryUpdater',
        'DataSources/Entity',
        'DataSources/GeometryUpdater',
        'Scene/PrimitiveCollection',
        'Specs/createScene'
    ], function(
        DynamicGeometryUpdater,
        Entity,
        GeometryUpdater,
        PrimitiveCollection,
        createScene) {
    'use strict';

    var scene;

    beforeAll(function() {
        scene = createScene();
    });

    afterAll(function() {
        scene.destroyForSpecs();
    });

    it('Constructor throws with no updater', function() {
        expect(function() {
            return new DynamicGeometryUpdater(undefined, new PrimitiveCollection(), new PrimitiveCollection());
        }).toThrowDeveloperError();
    });

    it('Constructor throws with no primitives', function() {
        var updater = new GeometryUpdater({
            entity : new Entity(),
            scene : scene,
            geometryOptions : {},
            geometryPropertyName : 'box',
            observedPropertyNames  : ['availability', 'box']
        });
        expect(function() {
            return new DynamicGeometryUpdater(updater, undefined, new PrimitiveCollection());
        }).toThrowDeveloperError();
    });

    it('Constructor throws with no groundPrimitives', function() {
        var updater = new GeometryUpdater({
            entity : new Entity(),
            scene : scene,
            geometryOptions : {},
            geometryPropertyName : 'box',
            observedPropertyNames  : ['availability', 'box']
        });
        expect(function() {
            return new DynamicGeometryUpdater(updater, undefined, new PrimitiveCollection());
        }).toThrowDeveloperError();
    });

    it('update throws with no time', function() {
        var updater = new GeometryUpdater({
            entity : new Entity(),
            scene : scene,
            geometryOptions : {},
            geometryPropertyName : 'box',
            observedPropertyNames  : ['availability', 'box']
        });
        var dynamicUpdater = new DynamicGeometryUpdater(updater, new PrimitiveCollection(), new PrimitiveCollection());
        expect(function() {
            return dynamicUpdater.update();
        }).toThrowDeveloperError();
    });
});
